use pnet::datalink::{self, Channel::Ethernet};
use pnet::packet::ethernet::EthernetPacket;

fn main() {
    // 获取所有网络接口
    let interfaces = datalink::interfaces();
    let interface = interfaces
        .into_iter()
        .find(|iface| iface.name == "ens160")  // 替换为你想要拦截的网卡名称
        .expect("找不到指定的网卡");

    // 创建数据链路层通道
    let (mut tx, mut rx) = match datalink::channel(&interface, Default::default()) {
        Ok(Ethernet(tx, rx)) => (tx, rx),
        Ok(_) => panic!("不支持的数据链路层通道"),
        Err(e) => panic!("创建通道失败: {}", e),
    };

    println!("开始拦截 {} 的数据包...", interface.name);

    loop {
        match rx.next() {
            Ok(packet) => {
                // 解析以太网帧
                if let Some(ethernet_packet) = EthernetPacket::new(packet) {
                    println!("拦截到数据包: 源MAC {} -> 目标MAC {}", 
                             ethernet_packet.get_source(),
                             ethernet_packet.get_destination());
                    
                    // 这里不调用 tx.send()，相当于丢弃数据包
                }
            },
            Err(e) => {
                eprintln!("接收数据包错误: {}", e);
                continue;
            }
        }
    }
}